/**
 * @description user路由 service 为了从服务器获得数据并整理返回数据
 * @author 印明帝
 */
const User = require('../db/model/User')
const { formatUser } = require('./_format')
const { addFollower } = require('./userRelation')

/** 
 * 获取用户信息
 * @method getUserInfo
 * @param {String} selectData 查询的数据 String是用户名，NUmber是id 
 * @param {String} password 
 * @returns {Object}
 */
async function getUserInfo(selectData,password) {
  let whereOpt = null
  // 判断传入的数据是string类型还是number类型
  if(typeof selectData === 'string'){
    whereOpt = {
      userName: selectData
    }
  } else {
    whereOpt = {
      id: selectData
    }
  }
  // 判断是否带password
  if (password) {
    Object.assign(whereOpt, { password })
  }
  
  // 查询用户是否存在
  const result = await User.findOne({
    attributes: ['id', 'userName', 'nickName', 'picture', 'city'],
    where: whereOpt
  })
  // 未找到
  if(result === null) {
    return result
  }
  // 格式化
  
  const formatRes = formatUser(result.dataValues)
  
  return formatRes
}

/** 创建用户
 * @method createUser
 * @param {Object} userInfo 
 */
async function createUser({ userName,password,gender,nickName=userName }) {
  let result = await User.create({
    userName,
    password,
    nickName,
    gender
  })
  const data = result.dataValues
  // 自己关注自己
  addFollower(data.id,data.id)
  return data
}

/**
 * 删除用户
 * @method deleteUser
 * @param {String} userName 
 * @returns {Boolean}
 */
async function deleteUser(userName) {
  // 返回的是删除的行数
  let result = await User.destroy({
    where: {
      userName
    }
  })

  return result > 0
}

/**
 * 更新用户
 * @method updateUser
 * @param {Object} userInfo 
 * @returns {Boolean}
 */
async function updateUser( oldUserInfo,{ password, nickName, picture, city }) {
  // 拼接修改内容
  const updateData = {}
  if (password) {
    updateData.password = password
  }
  if (nickName) {
    updateData.nickName = nickName
  }
  if (picture) {
    updateData.picture = picture
  }
  if (city) {
    updateData.city = city
  }
  // 拼接查询条件
  const whereData = {
    userName: oldUserInfo.userName
  }
  if (oldUserInfo.password) {
    whereData.password = oldUserInfo.password
  }

  // 修改
  let result = await User.update(updateData,{
    where: whereData
  })
  return result[0] > 0 // 修改的行数
}
module.exports = {
  getUserInfo,
  createUser,
  deleteUser,
  updateUser
}